package com.itheima.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.aliyuncs.http.HttpResponse;
import com.itheima.POJO.Member;
import com.itheima.constant.MessageConstant;
import com.itheima.constant.RedisMessageConstant;
import com.itheima.entity.Result;
import com.itheima.service.memberService;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.JedisPool;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;

@RestController
@RequestMapping("/member")
public class memberController {
    @Autowired
    private JedisPool jedisPool;

    @Reference
    private memberService memberService;

    @RequestMapping("/login")
    public Result login(HttpServletResponse response, @RequestBody Map map){
        /*
          拿到前端传过来的手机号和验证码
          那这个验证码 与之前存在redis里面的进行比较
          通过后 那手机号去查看用户是不是会员
          不是会员的话 把她添加为会员
          这时候表示可以登录成功了,我放一个唯一标识该用户的cookie到用户浏览器
          当用户访问任何请求时,服务器就能知道是哪个用户访问的了
         */
// {"telephone":"15312345678","validateCode":"d1234"}
        // 1.首先判断验证码是否正确
        String telephone = (String) map.get("telephone");
        String memberCode = (String) map.get("validateCode");
        String code = jedisPool.getResource().hget(RedisMessageConstant.SENDTYPE_LOGIN, telephone);
        if (memberCode!=null && code!=null &&code.equals(memberCode)){
            //验证码通过时
            //检查用户是否为会员
            Member memberBYtelephone = memberService.findMemberBYtelephone(telephone);
            if (memberBYtelephone ==null){
                //当该用户不是会员时 自动将他注册为会员
                Member member=new Member();
                member.setPhoneNumber(telephone);
                member.setRegTime(new Date());
                memberService.addMember(member);
            }
            //到这里的时候该用户已经是会员了 并且也可以登录成功了
            //我将他的手机号放到cookie传到用户对应的浏览器,当无数个用户访问服务器时,可以根据浏览器带过来的手机号
            //来判断是哪个用户,此时cookie作为 用户识别
            Cookie cookie = new Cookie("login_member_telephone",telephone);
            //这个设置表示 访问该服务器任何请求都会带着这个cookie
            cookie.setPath("/");
            cookie.setMaxAge(60*60*24*30);//有效期30天
            //需要把cookie发送给浏览器 需要用到response,在参数中写一个response
            response.addCookie(cookie);
            //登录成功以后要删除这个保存快速登录验证码的redis
            jedisPool.getResource().hdel(RedisMessageConstant.SENDTYPE_LOGIN,telephone);
            //把会员信息放到redis中
            //  此处空着未写` 因为目前功能体现不到


            return new Result(true,MessageConstant.LOGIN_SUCCESS);
        }else {
            //验证码不通过时
            return new Result(false, MessageConstant.VALIDATECODE_ERROR);
        }

    }
}
